package com.ccit.springbootlaw.service.impl;

import com.ccit.springbootlaw.mapper.CommentMapper;
import com.ccit.springbootlaw.pojo.Comment;
import com.ccit.springbootlaw.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.List;

/**
 * 评论服务实现类
 * 实现了CommentService接口，提供了评论相关的业务逻辑
 */
@Service
public class CommentServiceImpl implements CommentService {

    @Autowired
    private CommentMapper commentMapper;

    /**
     * 根据ID查询评论
     *
     * @param id 评论ID
     * @return 返回找到的评论对象，如果未找到则返回null
     */
    @Override
    public Comment findById(int id) {
        return commentMapper.findById(id);
    }

    /**
     * 根据用户ID查询评论
     *
     * @param userId 用户ID
     * @return 返回该用户发表的所有评论列表
     */
    @Override
    public List<Comment> findByUserId(int userId) {
        return commentMapper.findByUserId(userId);
    }

    /**
     * 根据文章ID查询评论
     *
     * @param articleId 文章ID
     * @return 返回该文章下的所有评论列表
     */
    @Override
    public List<Comment> findByArticleId(int articleId) {
        return commentMapper.findByArticleId(articleId);
    }

    /**
     * 根据父评论ID查询评论
     *
     * @param parentId 父评论ID
     * @return 返回该父评论下的所有子评论列表
     */
    @Override
    public List<Comment> findByParentId(Integer parentId) {
        return commentMapper.findByParentId(parentId);
    }

    /**
     * 根据创建时间范围查询评论
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 返回在指定时间范围内创建的所有评论列表
     */
    @Override
    public List<Comment> findByCreatedAtRange(Timestamp startTime, Timestamp endTime) {
        return commentMapper.findByCreatedAtRange(startTime, endTime);
    }

    /**
     * 插入新的评论
     *
     * @param comment 评论对象
     * @return 返回插入操作影响的行数
     */
    @Override
    public int insertComment(Comment comment) {
        return commentMapper.insertComment(comment);
    }

    /**
     * 删除评论
     *
     * @param id 评论ID
     * @return 返回删除操作影响的行数
     */
    @Override
    public int deleteCommentById(int id) {
        return commentMapper.deleteCommentById(id);
    }

    /**
     * 查询所有评论
     *
     * @return 返回所有评论的列表
     */
    @Override
    public List<Comment> findAll() {
        return commentMapper.findAll();
    }

    /**
     * 根据传入的 Comment 实体类内容进行多条件查找
     *
     * @param conditions 包含查询条件的 Comment 对象
     * @return 返回符合条件的评论列表
     */
    @Override
    public List<Comment> findByConditions(Comment conditions) {
        return commentMapper.findByConditions(conditions);
    }

    /**
     * 更新评论
     *
     * @param comment 评论对象
     * @return 返回更新操作影响的行数
     */
    @Override
    public int updateComment(Comment comment) {
        return commentMapper.updateComment(comment);
    }

    /**
     * 根据文章 ID 查找父评论为空的评论
     *
     * @param articleId 文章ID
     * @return 返回该文章下的所有根评论列表
     */
    @Override
    public List<Comment> findRootCommentsByArticleId(int articleId) {
        return commentMapper.findRootCommentsByArticleId(articleId);
    }
}